home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 223 / emacssrc / ed.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-02-17  |  11.4 KB  |  291 lines

  1. /*
  2.  * This file is the general header file for
  3.  * all parts of the MicroEMACS display editor. It contains
  4.  * definitions used by everyone, and it contains the stuff
  5.  * you have to edit to create a version of the editor for
  6.  * a specific operating system and terminal.
  7.  * mb: all short's changed to int's, except l_size & l_length.
  8.  */
  9.  
  10. #define    VSN    "2.19"            /* dal: version number        */
  11.  
  12. #define V7    0            /* V7 UN*X or Coherent        */
  13. #define VMS    0            /* VAX/VMS            */
  14. #ifdef    CPM
  15. #undef    CPM                /* dal: Alcyon idiocy kludge    */
  16. #endif
  17. #define CPM    0            /* CP/M-86            */
  18. #define MSDOS    0            /* MS-DOS (dal: Microsoft 4.00)    */
  19. #define AtST    1            /* Atari 520ST or 1040ST    */
  20.                     /*   (mb: Megamax C compiler)    */
  21.                     /*   (dal: Alcyon C compiler    */
  22.                     /*   v4.14 w/ dLibs libraries)    */
  23.  
  24. #if AtST
  25. #include <osbind.h>
  26. #include <fcntl.h>
  27. #include <stat.h>
  28. #include <string.h>
  29. #include <ctype.h>
  30. #include <malloc.h>
  31. #endif
  32.  
  33. #define ANSI    0            /* ANSI compatable (VT100)    */
  34. #define VT52    1            /* VT52 terminal (Zenith).      */
  35. #define VT100    0            /* Handle VT100 style keypad.   */
  36. #define LK201    0            /* Handle LK201 style keypad.   */
  37. #define RAINBOW    0            /* Use Rainbow fast video.      */
  38. #define TERMCAP    0            /* Use TERMCAP                  */
  39. #define    TTFUNC    0            /* Use hard-coded terminal fn()    */
  40.  
  41. #define HELP    1            /* mb: compile built-in help    */
  42. #define EXTRA    1            /* mb: compile less-used stuff    */
  43.                     /*     (together they add ~9K)    */
  44. #define CVMVAS    1            /* C-V, M-V arg. in screens.    */
  45.  
  46. #define GDEBUG    0            /* mb: General debugging flag    */
  47.  
  48. /* mb: for overflow checks, etc: you may want to edit for your system!    */
  49. #define MAXSH    0x7F            /* max pos short    */
  50. #define MAXUS    0xFF            /* max unsigned short    */
  51. #ifndef    MAXINT
  52. #define MAXINT    0x7FFF            /* max pos int        */
  53. #endif
  54. #define MAXUI    0XFFFF            /* max unsigned int    */
  55.  
  56. #define BFILES    1        /* mb: Read files in blocks    */
  57. #define FBLOCK    (1<<13)        /* For BFILES: (8K) choose "good" size    */
  58.  
  59. #define NFILEN  128            /* # of bytes, file name        */
  60. #define NBUFN   16            /* # of bytes, buffer name      */
  61. #define NBLOCK  16            /* # of bytes, line allocation    */
  62. #define KBLOCK  256            /* # of bytes, kbuf allocation    */
  63. #define NLINE   256            /* # of bytes, max line    reading    */
  64. #define NKBDM   256            /* # of strokes, keyboard macro */
  65. #define NPAT    80            /* # of bytes, pattern          */
  66. #define HUGE    1000            /* Huge number            */
  67.  
  68. #define ESCCH   0x1B            /* mb: end-of-search-pattern    */
  69. #define METACH  (CNTL|'[')  /* mb: 'CNTL'. M- prefix,   Control-[, ESC  */
  70. #define CNTLCH  (CNTL|'^')        /* C- prefix,   Control-^       */
  71. #define CANCEL  (CNTL|'U')        /* mb: cancel-input-line key    */
  72.  
  73. #define CNTL    0x0100            /* Control flag, or'ed in       */
  74. #define META    0x0200            /* Meta flag, or'ed in          */
  75. #define CTLX    0x0400            /* ^X flag, or'ed in            */
  76. #define FUNC    0x0800            /* for function keys, if any    */
  77. #define SHFT    0x1000            /* function keys + Shift        */
  78. #define ALT     0x2000            /* function keys + Alternate    */
  79. #define ED      0x8000            /* flag: cmd changes the file   */
  80.  
  81. #define    CRLF    "\r\n"            /* <CR> + <LF> pair        */
  82.  
  83. #ifndef FALSE
  84. #define FALSE   0            /* False, no, bad, etc.        */
  85. #define TRUE    1            /* True, yes, good, etc.    */
  86. #endif
  87. #define ABORT   2            /* Death, ^G, abort, etc.    */
  88.  
  89. #define FIOSUC  0            /* File I/O, success.        */
  90. #define FIOFNF  1            /* File I/O, file not found.    */
  91. #define FIOEOF  2            /* File I/O, end of file.       */
  92. #define FIOERR  3            /* File I/O, error.        */
  93.  
  94. #define CFCPCN  0x0001            /* Last command was C-P, C-N    */
  95. #define CFKILL  0x0002            /* Last command was a kill      */
  96. #define CFYANK  0x0004            /* mb: Last command was a yank  */
  97. #define CFSPLIT 0x0008            /* mb: Last split the window    */
  98.  
  99. /*
  100.  * There is a window structure allocated for
  101.  * every active display window. The windows are kept in a
  102.  * big list, in top to bottom screen order, with the listhead at
  103.  * "wheadp". Each window contains its own values of dot and mark.
  104.  * The flag field contains some bits that are set by commands
  105.  * to guide redisplay; although this is a bit of a compromise in
  106.  * terms of decoupling, the full blown redisplay is just too
  107.  * expensive to run for every input character. 
  108.  */
  109. typedef struct  WINDOW
  110.     {
  111.     struct  WINDOW *w_wndp;        /* Next window            */
  112.     struct  BUFFER *w_bufp;        /* Buffer displayed in window    */
  113.     struct  LINE *w_linep;        /* Top line in the window    */
  114.     struct  LINE *w_dotp;        /* Line containing "."        */
  115.     int     w_doto;            /* Byte offset for "."        */
  116.     struct  LINE *w_markp;        /* Line containing "mark"    */
  117.     int     w_marko;        /* Byte offset for "mark"    */
  118.     char    w_toprow;        /* Origin 0 top row of window   */
  119.     char    w_ntrows;        /* # of rows of text in window  */
  120.     char    w_force;        /* If NZ, forcing row.        */
  121.     char    w_flag;            /* Flags.            */
  122.     }
  123.     WINDOW;
  124.  
  125. #define WFFORCE 0x01            /* Window needs forced reframe  */
  126. #define WFMOVE  0x02            /* Movement from line to line   */
  127. #define WFEDIT  0x04            /* Editing within a line        */
  128. #define WFHARD  0x08            /* Better do a full display     */
  129. #define WFMODE  0x10            /* Update mode line.            */
  130.  
  131. /*
  132.  * Text is kept in buffers. A buffer header, described
  133.  * below, exists for every buffer in the system. The buffers are
  134.  * kept in a big list, so that commands that search for a buffer by
  135.  * name can find the buffer header. There is a safe store for the
  136.  * dot and mark in the header, but this is only valid if the buffer
  137.  * is not being displayed (that is, if "b_nwnd" is 0). The text for
  138.  * the buffer is kept in a circularly linked list of lines, with
  139.  * a pointer to the header line in "b_linep".
  140.  */
  141. typedef struct  BUFFER
  142.     {
  143.     struct  BUFFER *b_bufp;        /* Link to next BUFFER        */
  144.     struct  LINE *b_dotp;        /* Link to "." LINE structure   */
  145.     int     b_doto;            /* Offset of "." in above LINE  */
  146.     struct  LINE *b_markp;        /* The same as the above two,   */
  147.     int     b_marko;        /* but for the "mark"        */
  148.     struct  LINE *b_linep;        /* Link to the header LINE      */
  149.     char    b_nwnd;            /* Count of windows on buffer   */
  150.     char    b_flag;            /* Flags            */
  151.     char    b_fname[NFILEN];    /* File name            */
  152.     char    b_bname[NBUFN];        /* Buffer name            */
  153.     }
  154.     BUFFER;
  155.  
  156. #define BFTEMP  0x01            /* Internal temporary buffer    */
  157. #define BFCHG   0x02            /* Changed since last write    */
  158. #define BFEDIT  0x04            /* mb: OK to change (added)    */
  159.  
  160. /*
  161.  * The starting position of a
  162.  * region, and the size of the region in
  163.  * characters, is kept in a region structure.
  164.  * Used by the region commands.
  165.  */
  166. typedef struct
  167.     {
  168.     struct  LINE *r_linep;        /* Origin LINE address.        */
  169.     int     r_offset;        /* Origin LINE offset.        */
  170.     int     r_size;            /* Length in characters.    */
  171.     }
  172.     REGION;
  173.  
  174. /*
  175.  * All text is kept in circularly linked
  176.  * lists of "LINE" structures. These begin at the
  177.  * header line (which is the blank line beyond the
  178.  * end of the buffer). This line is pointed to by
  179.  * the "BUFFER". Each line contains a the number of
  180.  * bytes in the line (the "used" size), the size
  181.  * of the text array, and the text. The end of line
  182.  * is not stored as a byte; it's implied. Future
  183.  * additions will include update hints, and a
  184.  * list of marks into the line.
  185.  */
  186. typedef struct    LINE
  187.     {
  188.     struct    LINE *l_fp;        /* Link to the next line        */
  189.     struct    LINE *l_bp;        /* Link to the previous line    */
  190.     short    l_size;            /* Allocated size        */
  191.     short    l_used;            /* Used size            */
  192.     char    l_text[1];        /* A bunch of characters.    */
  193.     }
  194.     LINE;
  195.  
  196. #define lforw(lp)    ((lp)->l_fp)
  197. #define lback(lp)    ((lp)->l_bp)
  198. #define lgetc(lp, n)    ((lp)->l_text[(n)]&0xFF)
  199. #define lputc(lp, n, c)    ((lp)->l_text[(n)]=(c))
  200. /* mb: make these behave as unsigned shorts: */
  201. #define llength(lp)    ((lp)->l_used&MAXUS)
  202. #define lsize(lp)    ((lp)->l_size&MAXUS)
  203. /* mb: macro for text formatting with dot commands: */
  204. #define istext(lp)    ((lp)->l_used!=0 && (lp)->l_text[0]!='.')
  205.  
  206. /*
  207.  * The editor communicates with the display
  208.  * using a high level interface. A "TERM" structure
  209.  * holds useful variables, and indirect pointers to
  210.  * routines that do useful operations. The low level get
  211.  * and put routines are here too. This lets a terminal,
  212.  * in addition to having non standard commands, have
  213.  * funny get and put character code too. The calls
  214.  * might get changed to "termp->t_field" style in
  215.  * the future, to make it possible to run more than
  216.  * one terminal type.
  217.  */  
  218. typedef struct
  219.     {
  220.     int     t_nrow;            /* Number of rows.        */
  221.     int     t_ncol;            /* Number of columns.        */
  222.     int     (*t_open)();        /* Open terminal at the start.  */
  223.     int     (*t_close)();        /* Close terminal at end.    */
  224.     int     (*t_getchar)();        /* Get character from keyboard. */
  225.     int     (*t_putchar)();        /* Put character to display.    */
  226.     int     (*t_flush)();        /* Flush output buffers.    */
  227.     int     (*t_move)();        /* Move the cursor, origin 0.   */
  228.     int     (*t_eeol)();        /* Erase to end of line.    */
  229.     int     (*t_eeop)();        /* Erase to end of page.    */
  230.     int     (*t_beep)();        /* Beep.            */
  231.     int    (*t_hglt)();        /* Highlight text        */
  232.     int    (*t_nrml)();        /* Normal text            */
  233.     }
  234.     TERM;
  235.  
  236. extern    char    vsn[];            /* dal: Version identification    */
  237. extern  int     currow;          /* Cursor row            */
  238. extern  int     curcol;          /* Cursor column        */
  239. extern  int     thisflag;        /* Flags, this command        */
  240. extern  int     lastflag;        /* Flags, last command        */
  241. extern  int     curgoal;         /* Goal for C-P, C-N        */
  242. extern  int     mpresf;          /* Stuff in message line    */
  243. extern  int     sgarbf;          /* State of screen unknown      */
  244. extern  WINDOW  *curwp;          /* Current window        */
  245. extern  BUFFER  *curbp;          /* Current buffer        */
  246. extern  BUFFER  *oldbp;          /* mb: previous buffer          */
  247. extern  WINDOW  *wheadp;         /* Head of list of windows      */
  248. extern  BUFFER  *bheadp;         /* Head of list of buffers      */
  249. extern  BUFFER  *blistp;         /* Buffer for C-X-?        */
  250. extern  BUFFER  *bhelpp;         /* Buffer for help screens    */
  251. extern  BUFFER  *bdirp;         /* dal: Buffer for directory    */
  252. extern  int     kbdm[];          /* Holds kayboard macro data    */
  253. extern  int     *kbdmip;         /* Input pointer for above      */
  254. extern  int     *kbdmop;         /* Output pointer for above     */
  255. extern  char    pat[];           /* Search pattern        */
  256. extern  TERM    term;            /* Terminal information.    */
  257.  
  258. extern  BUFFER  *bfind();        /* Lookup a buffer by name    */
  259. extern  WINDOW  *wpopup();        /* Pop up window creation    */
  260. extern  LINE    *lnalloc();        /* Allocate a line        */
  261.  
  262. extern    char    *malloc();        /* normal byte-wise allocation    */
  263.  
  264.  
  265. /* dal: configurable variables */
  266. #define    CFG_VARS    12
  267. #define    CFG_MSIZE    32
  268. #define    CFG_VSIZE    ((CFG_VARS + 1) * sizeof(int))
  269. typedef struct 
  270.     {
  271.     char    magic[CFG_MSIZE];
  272.     int    value[CFG_VARS + 1];
  273.     }
  274.     T_CFG;
  275.  
  276. extern    T_CFG    cfg;
  277.  
  278. #define    ovrstrk    cfg.value[0]        /* mb: insert/overstrike flag    */
  279. #define    lmargin    cfg.value[1]        /* mb: Current left margin    */
  280. #define    fillcol    cfg.value[2]        /* Current fill column        */
  281. #define    tabsize    cfg.value[3]        /* mb: Spacing for <TAB> char    */
  282. #define    mousef    cfg.value[4]        /* dal: mouse mode flag        */
  283. #define    mb_right cfg.value[5]        /* dal: right mouse button bind */
  284. #define    mb_left    cfg.value[6]        /* dal: left mouse button bind  */
  285. #define    m_init    ((char*) &cfg.value[7])    /* dal: mouse activation string    */
  286. #define    mcur_dx    (m_init[3])        /* dal: mouse motion x-factor    */
  287. #define    mcur_dy    (m_init[4])        /* dal: mouse motion y-factor    */
  288. #define    m_move    (m_init+2)        /* dal: mouse motion set string */
  289. #define    autoindent cfg.value[10]    /* dal: autoindent mode flag    */
  290. #define    cfgchng    cfg.value[CFG_VARS-1]    /* jls: "cloned" system flag    */
  291.